package org.example.infra.mapper;

import lombok.Data;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.example.infra.entity.DataEntity;

import java.util.List;

/**
 * Description: 数据库支撑类
 * Created by 陈宇 on 2024-12-25 16:21
 * Created with IntelliJ IDEA.
 * @author 陈宇
 */
@Mapper
public interface IotDbMapper {

    /**
     * 记录总数
     * @param deviceId
     * @return
     */
    Integer selectCount(String deviceId);

    /**
     * 根据仓库 id 查找仓库名称
     * @param repoId
     * @return
     */
    List<DataEntity> queryRepoName(@Param("repoId") String repoId);


    /**
     * 根据仓库 id 指定仓库，获取到其在指定时间之前所有 pr id
     * @param repoId
     * @param userId
     * @param currentMillis
     * @param nextMillis
     * @return
     */
    List<DataEntity> queryPRs(@Param("repoId") Long repoId, @Param("userId") Long userId , @Param("currentMillis") long currentMillis, @Param("nextMillis") long nextMillis);

    /**
     * 根据仓库 id 指定仓库，获取到其在指定时间之前所有 issue id
     * @param repoId
     * @param userId
     * @param currentMillis
     * @param nextMillis
     * @return
     */
    List<DataEntity> queryIssues(@Param("repoId") Long repoId, @Param("userId") Long userId, @Param("currentMillis") long currentMillis, @Param("nextMillis") long nextMillis);

    /**
     * 根据 prCommentId，查看发表的评论内容
     * @param prCommentId
     * @return
     */
    List<DataEntity> queryPrCommentBody(@Param("prCommentId") Long prCommentId);

    /**
     * 根据 issueCommentId，查看发表的评论内容
     * @param issueCommentId
     * @return
     */
    List<DataEntity> queryIssueCommentBody(@Param("issueCommentId") Long issueCommentId);

    /**
     * 获取贡献者数量
     * @param repoId
     * @param nextMillis
     * @return
     */
    List<DataEntity> queryContributors(@Param("repoId") String repoId, @Param("nextMillis") long nextMillis);

    /**
     * 获取 issue 数量
     * @param repoId
     * @param nextMillis
     * @return
     */
    List<DataEntity> queryIssueIds(@Param("repoId") String repoId, @Param("nextMillis") long nextMillis);

    /**
     * 获取 pr 数量
     * @param repoId
     * @param nextMillis
     * @return
     */
    List<DataEntity> queryPrIds(@Param("repoId") String repoId, @Param("nextMillis") long nextMillis);

    /**
     * 获取 star 数量
     * @param repoId
     * @param nextMillis
     * @return
     */
    List<DataEntity> queryStarCount(@Param("repoId") String repoId, @Param("nextMillis") long nextMillis);

    /**
     * 获取 fork 数量
     * @param repoId
     * @param nextMillis
     * @return
     */
    List<DataEntity> queryForkCount(@Param("repoId") String repoId, @Param("nextMillis") long nextMillis);

    /**
     * 获取代码行
     * @param repoId
     * @return
     */
    List<DataEntity> getCodeLine(@Param("repoId") String repoId);
}
